/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: kano
 * Date: 2025-02-28
 * Time: 22:30
 */
public class Animal {
    String name;
    public int age;
    public void methodA(int a)
    {
        System.out.println("Animal methodA");
    }

    void eat()
    {
        System.out.println(name+" I am eaiting");
    }
    void Sleep()
    {
        System.out.println("I am sleeping");
    }

    public static void main(String[] args) {
        Dog dog = new Dog();
        //name和age属性肯定是从父类Animal中继承下来的
        //1.子类会将父类中的成员变量或者成员方法继承到子类中了
        System.out.println(dog.age);
        System.out.println(dog.name);
        //2.子类继承父类之后，必须要新添加自己特有的成员，体现出与基类的不同，否则就没有必要继承了
        //dog访问的eat()和sleep()方法也是从Animal中继承下来的
         dog.eat();
         //3.子类中访问父类的成员变量:遵循就近原则，先访问自己的，没有再访问父类的
        System.out.println(dog.age);
        System.out.println();
        //4.1 成员方法没有同名时，在子类方法中或者通过子类对象访问方法时，则优先访问自己的，自己没有时
        //再到父类中找，如果父类中也没有则报错
        dog.methodC();
    }
}

class Dog extends Animal
{

    public void methodA()
    {
        System.out.println("Dog methodA");
    }
    void methodB()
    {
        System.out.println(this+"methodB");
    }
    void methodC()
    {
        //通过子类对象访问父类与子类中不同名方法时，优先在子类中找，找到则访问，否则在父类中找，找到
        //则访问，否则编译报错
        //4.2 过派生类对象访问父类与子类同名方法时，如果父类和子类同名方法的参数列表不同(重载)，根据调用
        //方法适传递的参数选择合适的方法访问，如果没有则报错
        methodA(12);
        methodA();
        methodB();
    }
    int age = 2;

    {
        this.name = "Dog";
//        this.age = 20 --> 子类自己的age
    }
    void bark()
    {
        System.out.println(this.name+"汪汪");
    }

}
